﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace TodoListApp.Commands
{
    internal class RelayCommand : ICommand
    {
        //private readonly Action _execute;
        //private readonly Func<bool>? _canExecute;
        private readonly Action<object> _execute;
        private readonly Predicate<object>? _canExecute;

        public event EventHandler? CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove {  CommandManager.RequerySuggested -= value;}
        }

        //public RelayCommand(Action execute, Func<bool>? canExecute = null)
        //{
        //    _execute = execute ?? throw new ArgumentNullException(nameof(execute));
        //    _canExecute = canExecute;
        //}

        public RelayCommand(Action<object> execute, Predicate<object>? canExecute = null)
        {
            _execute = execute ?? throw new ArgumentNullException(nameof(execute));
            _canExecute = canExecute;
        }

        public bool CanExecute(object? parameter)
        {
            //return _canExecute == null || _canExecute();
            return _canExecute == null || _canExecute(parameter!);
        }

        public void Execute(object? parameter)
        {
            //_execute();
            _execute(parameter!);
        }
    }
}
